{
/**
 * 关于函数里面的传入的参数 arguments
 * @return {[type]} [description]
 */
  function a() {
    console.log(arguments);
    console.log(arguments instanceof Array); //flase
    let argumentsArr = Array.prototype.slice.apply(arguments);
    console.log(argumentsArr);
    console.log(argumentsArr instanceof Array); //true
  }
  // a('a', 'b', 'c', 'd', {name: "yyyyy"});
  function b() {
    console.log(arguments);
    let len = arguments.length;
    let argArr = new Array(len);
    for (let i = 0; i < len; i++) {
      argArr[i] = arguments[i];
    }
    return argArr
  }
  // b('a', 'b', {name: 'ytytyt'});

  function func(firstArg, ...restArgs) {
    console.log(Array.isArray(restArgs)); //true
    console.log(firstArg, restArgs);
  }
  // func(1, 2, 3); //1,[2,3]

  function func2(...restArgs) {
    console.log(Array.isArray(restArgs)); //true
    console.log(restArgs);
  }
  // func2(1, 2, 3); //[1,2,3]
}

{
  /*
    arguments是数组吗？若不是，如何变为数组？
  */

  //ES5
  function func(){
    let arr=Array.prototype.slice.apply(arguments);
    console.log(arr);
  }
  func('a','b',{method:'利用slice()'});
  function func2(){
    let arr=Array.prototype.concat.apply([],arguments);
    console.log(arr);
  }
  func2('q','e',{method:'用数组拼接的方法'});
  //用循环的方式  自定义一个空的数组，然后for循环遍历arguments里面的子元素等于空数组的子元素

  //ES6
  function func3(){
    let arr=Array.from(arguments);
    console.log(arr);
  }
  func('r','t',{method:'用es6里面的from()'})

}

{
  /**
   * 类数组对象和数组对象的区别？
   *  1.类数组只有length一个属性，没有数组的方法；
   *  2.类数组的数据类型不是array，是object
   * 数组和对象的区别？
   * 1.一般的对象没有索引这个属性，数组有索引；
   * 2.对象是利用对象的键值对存取数据；属性是一个srting
   * 3.数组的索引是number类型的数据
   */
/**
 * [createArrObj 如果自定义一个类素组对象？]
 * @return {[type]} [description]
 */
  function CreateArrObj(){};
  CreateArrObj.prototype=Object.create(Array.prototype);
  let arr=new CreateArrObj();
  arr.push('yyyy');
  arr.push({name:'yyyyy'})
  console.log(arr);
}
